import {
	getToken
} from './user'
import http, {
	baseFilesURL
} from '@/common/request.js'
import {
	nextTick
} from 'vue'
import {
	getCode,
	getOpenid,
	getOpenidStatus,
	setOpenid,
	setOpenidStatus
} from './openId';

export function urlToObj(url) {
	let obj = {}
	let str = url.slice(url.indexOf('?') + 1)
	let arr = str.split('&')
	for (let j = arr.length, i = 0; i < j; i++) {
		let arr_temp = arr[i].split('=')
		obj[arr_temp[0]] = arr_temp[1]
	}
	return obj
}

// [跳转]
export function navTo(url, params = {}, callback) {
	if (!navigateValidate(url)) {
		return
	}

	// url 路由
	// params 参数
	let prefix
	// 如果有参数
	if (JSON.stringify(params) !== "{}") {
		prefix = encodeURIComponent(JSON.stringify(params))
		url = `${url}?item=${prefix}`
	}
	// 跳转核心
	nextTick(() => {
		uni.navigateTo({
			url,
		});

		setTimeout(() => {
			// 跳转回调
			callback && callback()
		}, 200)
	})
}

// switchTab跳转
export function sgoto(url, params = {}) {
	if (!navigateValidate(url)) {
		return
	}
	// url 路由
	// params 参数
	let prefix
	// 如果有参数 emit 表示要发送uni.$emit 
	if ('emit' in params) {
		// emit 必须是一个对象
		let D = params.emit
		for (let K in D) {
			uni.$emit(K, D[K])
		}
	}

	// 跳转核心
	nextTick(() => {
		uni.switchTab({
			url,
		});
	})
}

// reLaunch 重定向路由
export function rgoto(url) {
	// 跳转核心
	nextTick(() => {
		uni.reLaunch({
			url,
		});
	})
}

// 返回
export function navBack(delta = 1) {
	uni.navigateBack({
		delta
	})
}

// 图片地址
export function getImgSrc(img, boo = false) {
	// boo true 表示读取本地图片 打包时需要注释掉
	// 测试为prefix 为空	
	let prefix = ''
	prefix = 'https://syzx.s3.cn-northwest-1.amazonaws.com.cn/yhsc_image'
	return !boo ? `${prefix}${img}` : img
}

// 设置loading框
export function setLoadingToast(title, params, mask = true) {
	uni.showLoading({
		title,
		...params,
		mask
	})
}

// 设置toast框
export function setToast(title) {
	nextTick(() => {
		uni.showToast({
			title,
			icon: "none",
			duration: 1500
		})
	})
}

// 复制文本
export function copy(data) {
	data = data.toString()
	uni.setClipboardData({
		data, //要被复制的内容
		success: () => { //复制成功的回调函数
		},
		fail(e) {
			// console.log('e fail ==> ', e);
		}
	});
}

// 上传文件
export const uploadFile = (e) => {
	setLoadingToast("上传中...")
	return new Promise(async (resolve, reject) => {
		try {
			let url = baseFilesURL
			let filePath = e
			let name = 'file'
			let header = {
				'token': getToken()
			}
			let _res = await uni.uploadFile({
				url,
				filePath,
				name,
				header
			})
			uni.hideLoading()
			console.log('_res ============> ', _res.data);
			resolve(JSON.parse(_res.data).data)
		} catch (e) {
			reject(e)
		}
	})
}

// 存放当前用户登录的身份【需要取不同的token】
// 如果从菜单 【物流公司】进入 存放 user: 
// pages/logisticsCompany/login/login
// 如果从菜单 【司机】进入
// pages/driver/login/login
// 如果从菜单 【宇硕】进入
// pages/yuShuo/login/login
export function setUserIdentity() {
	const loc = window.location.href;
	const userInfo = {
		logisticsCompany: {
			role: 'logisticsCompany'
		},
		driver: {
			role: 'driver'
		},
		yuShuo: {
			role: 'yuShuo'
		}
	};

	if (loc.includes('logisticsCompany')) {
		// 存放物流公司用户信息
		uni.setStorageSync('userIdentity', userInfo.logisticsCompany);
	} else if (loc.includes('driver')) {
		// 存放司机用户信息
		uni.setStorageSync('userIdentity', userInfo.driver);
	} else if (loc.includes('yuShuo')) {
		// 存放宇硕用户信息
		uni.setStorageSync('userIdentity', userInfo.yuShuo);
	} else {
		// 如果不属于任何一种角色，则清除本地存储
		uni.removeStorageSync('userIdentity');
	}
	// 每次调用 清空code
	// setOpenidStatus(0)
}

// 获取当前登录的身份
export function getUserIdentity() {
	return uni.getStorageSync('userIdentity');
}

// 跳转权限监听
export function navigateValidate(route) {
	let retult = false
	// 获取角色
	const userIdentity = getUserIdentity();
	// 根据权限处理有数据
	if (userIdentity && userIdentity.role) {
		// 是否登录
		const token = getToken();
		// console.log('userIdentity =======> ', userIdentity);
		// console.log('token =========> ', token);
		switch (userIdentity.role) {
			case 'logisticsCompany':
				// 如果没有token 但是访问了物流公司其他页面 跳转到登陆页面
				if (token) {
					// 登录了 但是 访问的路由yushuo或者司机权限页面 跳转到当前权限的首页
					if (!route.includes(userIdentity.role)) {
						rgoto('/pages/logisticsCompany/index/index');
					} else {
						// 放行
						retult = true
					}
				} else {
					// 如果访问的是注册
					if (route.includes('logisticsCompany/register')) {
						// 放行
						retult = true
					} else {
						rgoto('/pages/logisticsCompany/login/login');
					}
				}
				break;
			case 'driver':
				if (token) {
					// 登录了 但是 访问的路由不是权限内的
					if (!route.includes(userIdentity.role)) {
						rgoto('/pages/driver/index/index');
					} else {
						// 放行
						retult = true
					}
				} else {
					rgoto('/pages/driver/login/login');
				}
				break;
			case 'yuShuo':
				if (token) {
					// 登录了 但是 访问的路由不是权限内的
					if (!route.includes(userIdentity.role)) {
						rgoto('/pages/yuShuo/index/index');
					} else {
						// 放行
						retult = true
					}
				} else {
					rgoto('/pages/yuShuo/login/login');
				}
				break;
			default:
				break;
		}
	}
	// 返回验证结果
	return retult
}


// 是否是微信环境
export function isWechat() {
	var ua = window.navigator.userAgent.toLowerCase();
	if (ua.match(/micromessenger/i) == 'micromessenger') {
		//console.log('是微信客户端')  
		return true;
	} else {
		//console.log('不是微信客户端')
		return false;
	}
}

// appid
export const APPID = 'wx510ac346eb284fe3'

//跳转获取code的地址
export function getCodeUrl() {
	// 格式化回调参数
	const REDIRECT_URI = encodeURIComponent(window.location.href)
	const SCOPE = 'snsapi_base' //静默获取无需确定snsapi_base 需用户手动确定snsapi_userinfo
	var href =
		`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=${SCOPE}&state=STATE#wechat_redirect`
	return href
}

// 去跳转获取code
export function gotoGetCode() {
	if (isWechat() && !getOpenid() && !getOpenidStatus()) {
		//去获取OPENID 设置状态为请求中 防止回调时死循环
		setOpenidStatus(1)
		const href = getCodeUrl(window.location.href)
		window.location.href = href
	} else {
		uni.hideLoading()
		console.log('不去跳转获取code');
	}
}

// 获取地址栏中的code
export function getQueryObject(url) { //可当成一个公用方法
	url = url == null ? window.location.href : url;
	let search = url.substring(url.indexOf("?") + 1);
	let obj = {};
	let reg = /([^?&=]+)=([^?&=]*)/g;
	search.replace(reg, function(rs, $1, $2) {
		let name = decodeURIComponent($1);
		let val = decodeURIComponent($2);
		val = String(val);
		obj[name] = val;
		return rs;
	});
	return obj;
}